package com.riku.security.core;

import java.util.List;
import java.util.Set;

/**
 * 实现此接口,buildServicePath进行服务加载即使用自动权限校验功能
 */
public interface SeAuthorityService {

     /**
      * 系统启动时会按serviceCode载入这些service的api列表,当接口调用时,如果url地址存在于载入的api列表,
      * 就会去取getPathsFromCache的个人权限进行比对拦截
      * 如果service的部分接口地址不需要拦截,就不要把接口配到菜单里
      * 如果整个service的接口都不需要拦截,此处就不要build进来
      * @return
      */
     String[] buildServicePath();

     /**
      * 白名单的不进行拦截，当然buildServicePath规定之外的路径本身就不会拦截。
      * 1.指定对build进来的service的接口，其中哪些不需要拦截 2.有些整体不需要拦截的可通过白名单避免多余无效的匹配过程
      * @return
      */
     String[] buildWhiteList();

     /**
      * 实现登录功能时,请手动调用SeCommonService.getApiSecurityForLogin会返回员工有权限的接口路径列表,请自行将列表存储缓存,并重写此方法取出
      * security会在每次接口调用时，过滤器回调此方法获取员工权限进行比对，建议从缓存获取
      * @return
      */
     List<Long> getPathsFromCache();

     /**
      * 当进行接口调用时，告诉系统当前的api地址属于哪个service，可通过threadlocal或者session返回
      * 如果不告知，会对载入的所有service的地址进行比对,会多耗时间
      * 例:此处传security,调用接口时就会将url与security服务的api列表比对,若存在则接下来需要去判断用户权限,不存在则不需要判断权限
      * @return
      */
     String getCurrentServiceCode();
}
